package com.gs.common.util

import android.graphics.Rect
import android.view.View
import android.widget.ScrollView

object AdaptSoftKeyBoardUtil {

    /**
     * 为了软键盘不挡住页面内容以及按钮，需要在跳出软键盘时，向上移动页面
     * @param parentScrollView 滑动视图，父视图，用于页面上一移的视图，不可或缺
     * @param contentView 内容视图，一般为LinearLayout，这个视图包含滑动界面所有内容
     * @param topBackButtonLayout 顶部返回键视图，为了不使用系统的ActionBar而自定义的，引入这个数据是为了计算屏幕是否还有足够空间能容纳软键盘
     * @param editAreaLayout 编辑区域框，包含所有编辑内容，软键盘上移后，编辑区域的内容都必须可见，即屏幕划到这个区域上方就必须停止
     * @param buttonLayout 按钮的父视图，这个视图内包含一个按钮 button
     * @param buttonOrWrapBtnLayout 按钮或者包含多个按钮的视图，是buttonLayout的子layout
     */
    fun moveContentToSeeButton(parentScrollView: ScrollView, contentView: View, topBackButtonLayout: View, editAreaLayout: View , buttonLayout: View, buttonOrWrapBtnLayout: View) {
        val r = Rect()
        contentView.getWindowVisibleDisplayFrame(r) //获取窗口整体拥有可被看见的区域，也就是刚好去除了“软键盘”
        val screenHeight = contentView.rootView.height  //手机屏幕总高度
        val buttonOrWrapBtnLayoutHeight = buttonOrWrapBtnLayout.height
        val keyboardHeight = screenHeight - r.bottom //软键盘高度
        //屏幕总高度与注册列表layout之差，也就是没有填满总高度是多少
        val registerContentLayoutTranslationY = screenHeight - (contentView.height + topBackButtonLayout.height)
        //如果这个高度能装的下软键盘，就不用移动页面了
        if (registerContentLayoutTranslationY < keyboardHeight) {
            //如果键盘高度大于屏幕高度的15%就移动页面，现在手机都比较大，这个判断可有可无
            if (keyboardHeight > screenHeight * 0.15) {
                parentScrollView.smoothScrollTo(0, editAreaLayout.top) //屏幕移动到编辑区域的上方
                buttonOrWrapBtnLayout.translationY = - (buttonLayout.height.toFloat() - buttonOrWrapBtnLayoutHeight.toFloat()) / 2f - buttonOrWrapBtnLayoutHeight / 2f
//                下面这种方法页面写死，而且上移部分会被隐藏，不好用
//                val btnTranslationY = btnLayoutHeight - btnHeight - 100f  //按钮需要移动的总高度
//                val enoughHeight = keyboardHeight - registerContentLayoutTranslationY + btnHeight + 10f //整个页面需要移动的高度，也就是从整体看，需要移动这么多，才能装下软键盘+显示按钮
//                if (btnTranslationY > enoughHeight) {
//                    registerButton!!.translationY = - enoughHeight //向上移动为负号 - 向下移动为加号 +
//                } else {
//                    registerButton!!.translationY = - btnTranslationY
//                    registerContentLayout!!.translationY = - (enoughHeight - btnTranslationY + 120f) //移完按钮后，还需要layout移动多少按钮才可以被完全显示出来
//                }
            }
        }else{
            buttonOrWrapBtnLayout.translationY = 0f
//            registerContentLayout!!.translationY = 0f
        }
    }
}